#ifndef STRINGTABLE_H
#define STRINGTABLE_H

#include <QStringList>

class StringTable : public QList<QStringList>
{
public:

    // Конструктор
    StringTable();

    // Конструктор. Инициализация таблицы количесвтом строк и столбцов
    StringTable(int rows, int columns);

    // Переобределено
    void clear();

    // Возвращает значение по данной строке и столбцу.
    const QString &cellAt(int row, int column) const;

    // Устанавливает значение для ячейки
    void setCell(int row, int column, const QString &value);

    // Количество столбцов в таблице
    int columnCount() const;

    // Устанавливает количество столбцов в таблице
    void setColumnCount(int columns);

    // Количество строк в таблице
    int rowCount() const;

    // Устанавливает количество строк в таблице
    void setRowCount(int rows);

    /**
     * Insert count empty rows at the end of the table.
     */

    void appendRows(int count = 1);

    /**
     * Insert count empty columns at the end of the table.
     */
    void appendColumns(int count = 1);
    
    /**
     * Insert count empty rows at row row.
     */

    void insertRows(int row, int count = 1);

    /**
     * Insert count empty columns at column column.
     */
    void insertColumns(int column, int count = 1);

    /**
     * Remove count empty rows at row row.
     */

    void removeRows(int row, int count = 1);

    /**
     * Remove count empty columns at column column.
     */
    
    void removeColumns(int column, int count = 1);

    /**
     * Return column at pos position.
     */

    QStringList column(int pos) const;

    /**
     * Set column at pos position.
     */

    void setColumn(int pos, const QStringList &column);

    /**
     * Insert filled column at the end of the table.
     */

    void appendColumn(const QStringList &column);
    
    /**
     * Return row at pos position.
     */

    QStringList row(int pos) const;

    /**
     * Append filled row at the end of the table.
     */

    void appendRow(const QStringList &row);

private:
    int m_columnCount;
};

#endif // STRINGTABLE_H
